package com.myth.string;

import org.junit.Test;

/**
 *
 * @author
 * @create 2021/8/10
 */
public class StringMethodTest {
    /**
     * int length():返回字符串的长度:return value.Length
     * char charAt(int index):返回某索引处的字符return value[index]
     * boolean isEmpty():判断是否是空字符串: return value.Length == e
     * String toLowercase():使用默认语言环境，将 String中的所有字符转换为小写
     * String toUppercase():使用默认语言环境，将 String中的所有字符转换为大写
     * String trim():返回字符串的副本，忽略前导空白和尾部空白
     */
    @Test
    public void test1(){
        String s1 = "HelloWorld";
        System.out.println(s1.length());
        System.out.println(s1.charAt(4));
        String ss = "";
        System.out.println(s1.isEmpty());
        System.out.println(ss.isEmpty());

        String s2 = s1.toLowerCase();
        System.out.println(s1);
        System.out.println(s2);

        String s3 = "   He  ll o W or ld   ";
        String s4 = s3.trim();//登录用户名的时候
        System.out.println(s3);
        System.out.println(s4);
    }


    /**
     * boolean equals(object obj):比较字符串的内容是否相同
     * boolean equalsIgnoreCase(String anotherString): 与equals方法类似，忽略大小写
     * String concat(String str):将指定字符串连接到此字符串的结尾。等价于用"+”
     * int compareTo(String anotherString):比较两个字符串的大小
     * String substring(int beginIndex):返回一个新的字符串，它是此字符串的从beginIndex开始截取后面的字符串。
     * String substring(int beginIndex， int endIndex):返回一个新字符串，它是此字符串从beginIndex开始截取，到endIndex的前一个字符结束。
     *  string substring有多种。
     */
    @Test
    public void test2(){
        String s1 = "HelloWorld";
        String s2 = "helloworld";
        System.out.println(s1.equals(s2));
        System.out.println(s1.equalsIgnoreCase(s2));

        String s3 = "abc";
        String s4 = s3.concat("def");
        System.out.println(s3);
        System.out.println(s4);

        String s5 = "abc";
        String s6 = new String("abd");
        System.out.println(s5.compareTo(s6));//字符串排序

        String s7 = "北京尚硅谷教育";
        String s8 = s7.substring(2);
        System.out.println(s7);
        System.out.println(s8);

        String s9 = s7.substring(3,5);
        System.out.println(s9);
    }

    /**
     * boolean endsWith(String suffix): 测试此字符串是否以指定的后级结束
     * boolean startsWith(String prefix): 测试此字符串是否以指定的前级开始
     * boolean startsWith(String prefix, int toffset): 测试此字符串从指定素引开始的子字符串是否存在
     *
     *
     * boolean contains(CharSequence s):当且仅当此字符串包含指定的char值序列时，返回true
     * int index0f(String str): 返回指定子字符串在此字符事中第一次出现处的索引
     * int indexOf(String str, int fromIndex): 返回指定子字符串在此字符串中第一次出 现处的索引,从指定的素引开始.
     * int lastIndex0f(String str): 返回指定子字符串在此字符串中最右边出现处的素引
     * int LastIndexOf(string str, int fromIndex): 返回指定子字符串在此字符事中最后-次出现处的索引，从指定的索引开始反向搜系
     * 注: indexof和astIndex0f方法 如果未找到都是返回-1
     *
     *
     */
    @Test
    public void test3(){
        String str1 = "HelloWorld";
        boolean b1 = str1.endsWith("ld");
        System.out.println(b1);

        boolean b2 = str1.startsWith("ll");
        System.out.println(b2);

        boolean b3 = str1.startsWith("lo",2);
        System.out.println(b3);

        String str2 = "or";
        System.out.println(str1.contains(str2));

        System.out.println(str1.indexOf("llo"));
        System.out.println(str1.indexOf("llo",5));

        System.out.println(str1.lastIndexOf("or"));
        System.out.println(str1.lastIndexOf("o",5));
        //什么情况下，index0f(str) 和LastIndexOf(str)返回值相同?
        //情况一:存在唯一的一个str. 情况二:不存在str

    }

    /**
     * 替换：
     * 1.String replace(char oldChar, char newChar):返回一个新的字符串，它是
     *     通过用newChar替换此字符串中出现的所有oldChar得到的。
     * 2.String replace(CharSequence target, CharSequence replacement): 使
     *     用指定的字面值替换序列替换此字符串所有匹配字面值目标序列的子字符串。
     * 正则：
     * 3.String replaceAl(String regex, String replacement): 使用给定的
     *     replacement替换此字符串所有匹配给定的正则表达式的子字符串。
     * 4.String replaceFirst(String regex, String replacement): 使用给定的
     *     replacement替换此字符串匹配给定的正则表达式的第一个 子字符串。
     *
     * 匹配：
     * 5.boolean matches!String regex):告知此字符串是否匹配给定的正则表达式。
     *
     * 切片：
     * 6.StringD split(String regex):根据给定正则表达式的匹配拆分此字符串。
     * 7.StringD split(String regex, int limit):根据匹配给定的正则表达式来拆分此
     * 字符串，最多不超过limit个，如果超过了，剩下的全部都放到最后个 元素中。
     *
     *
     */
    @Test
    public void test4() {
        String str1 = "北京尚硅谷教育";
        String str2 = str1.replace("北", "东");
        String str3 = str1.replace("北京", "南京");

        System.out.println(str1);
        System.out.println(str2);
        System.out.println(str3);

        System.out.println("********************");
        String str = "12hel1o34world5java7891mysql456";
        //把字符串中的数字替换成，如果结果中开头和结尾有，的话去掉
        String string = str.replaceAll("\\d+", ",").replaceAll("^,|,$", "");
        System.out.println(string);

        System.out.println("********************");
        str = "12345";
        //判断str字符事中是否全部有数字组成，即有1-n个数字组成
        boolean matches = str.matches("\\d+");
        System.out.println(matches);
        String tel = "0571-4534289";
        //判断这是否是-一个杭州的固定电话
        boolean result = tel.matches("0571-\\d{7,8}");
        System.out.println(result);

        System.out.println("*********************");
        str = "hello|world|java";
        String[] strs = str.split("\\|",2);
        for (int i = 0; i < strs.length; i++) {
            System.out.println(strs[i]);
        }
        System.out.println();
        str2 = "hello.world.java";
        String[] strs2 = str2.split("\\.",1);
        for (int i = 0; i < strs2.length; i++) {
            System.out.println(strs2[i]);
        }

    }



}
